package com.finger.wx.assistant.dao;

import java.util.List;

import com.finger.wx.assistant.util.xml.UiXml;
import com.finger.wx.assistant.vo.Point;

public interface CmdDao {

	/**
	 * 获取界面的XML文件
	 */
	String getUIXml();

	/**
	 * 获取text属性不为空的节点
	 * 
	 * @return
	 */
	List<UiXml> getUIXmlEx();

	/**
	 * 获取id属性不为空的节点
	 * 
	 * @return
	 */
	List<UiXml> getUIXmlEx2();

	/**
	 * 在当前界面中按ID查找组件的位置
	 * 
	 * @param id
	 *            id属性
	 * @return
	 */
	Point findCompontById(String id);

	/**
	 * 在当前界面中按条件查找组件的位置
	 * 
	 * @param textVal
	 *            文本属性
	 * @param nclassVal
	 *            组件的属性
	 * @return
	 */
	Point findCompontLocation(String textVal, String nclassVal);

	/**
	 * 在当前界面中按条件查找组件的位置
	 * 
	 * @return
	 */
	void findCompontsLocation(List<Point> points);

	/**
	 * 当前界面是否包含某些文本信息
	 * 
	 * @param s
	 * @return
	 */
	boolean topUIContains(String s);

	/**
	 * 获取当前应用包名和组件名
	 * 
	 * @param type
	 *            1 package 2 Activity
	 * 
	 */
	String getTopActivity(int type);

	/**
	 * 用默认浏览器打开网页
	 * 
	 * @param url
	 */
	void openWeb(String url);

	/**
	 * 用微信浏览器打开网页
	 * 
	 * @param packagename
	 * @param url
	 */
	void weixinUrl(String packagename, String url);

	/**
	 * 清理应用缓存
	 * 
	 * @param packagename
	 */
	void appClean(String packagename);

	/**
	 * 获取已安装应用的版本号
	 * 
	 * @param packagename
	 */
	String appVersion(String packagename);

	/**
	 * 获取已安装应用首次安装时间
	 * 
	 * @param packagename
	 */
	String appFirstInstallTime(String packagename);

	/**
	 * 获取已安装应用升级安装的时间
	 * 
	 * @param packagename
	 */
	String appLastUpdateTime(String packagename);

	/**
	 * 隐藏app
	 * 
	 * @param packagename
	 */
	void disableApp(String packagename);

	/**
	 * 显示app
	 * 
	 * @param packagename
	 */
	void enableApp(String packagename);

	/**
	 * 判断设备是否安装指定的app
	 * 
	 * @param packagename
	 */
	boolean existApp(String packagename);

	/**
	 * 获取通知栏信息
	 * 
	 * @param packagename
	 */
	List<String> getNotification(String packagename);

	/**
	 * 安装app
	 * 
	 * @param path
	 *            安装包路径
	 */
	void install(String path);

	/**
	 * 卸载app
	 * 
	 * @param packagename
	 */
	void uninstall(String packagename);

	/**
	 * 启动app
	 * 
	 * @param packagename
	 */
	void runApp(String packagename);

	/**
	 * 启动app
	 * 
	 * @param packagename
	 * @param activityname
	 */
	void runApp(String packagename, String activityname);

	/**
	 * 关闭app
	 * 
	 * @param packagename
	 */
	void killApp(String packagename);

	/**
	 * 指定APP打开网址 [存在部分应用版本不兼容情况]
	 * 
	 * @param url
	 * @param id
	 *            0 360浏览器 1 QQ浏览器 2 海豚浏览器 3 欧朋浏览器 4 遨游浏览器 5 UC浏览器
	 */
	void runUrl(String url, int id);

	/**
	 * 获取屏幕分辨率
	 * 
	 * @param f
	 *            1 获取宽 2 获取高 3 获取DPI
	 */
	String getScreen(int f);

	/**
	 * 设置手机时间
	 * 
	 * @param day
	 *            日期格式yyyyMMdd
	 * @param time
	 *            时间格式hh:mm:ss
	 */
	void setTime(String day, String time);

	/**
	 * 按一次指定键
	 * 
	 * @param key
	 *            某个键的名字
	 * 
	 */
	void keyPress(String key);

	/**
	 * 模拟手指在屏幕上滑动操作，从点1滑动到点2，可设置滑动耗时
	 * 
	 * @param x1
	 * @param y1
	 * @param x2
	 * @param y2
	 * @param time
	 */
	void swipe(int x1, int y1, int x2, int y2, int time);

	/**
	 * 模拟手指在屏幕上滑动操作，从点1滑动到点2,默认200ms
	 * 
	 * @param x1
	 * @param y1
	 * @param x2
	 * @param y2
	 * @param time
	 *            (ms)
	 */
	void swipe(int x1, int y1, int x2, int y2);

	/**
	 * 短暂点击屏幕上指定的位置
	 * 
	 * @param x
	 * @param y
	 */
	void tap(int x, int y);

	/**
	 * 按住屏幕指定位置，并且按住一段时间
	 * 
	 * @param x
	 * @param y
	 * @param time
	 *            (ms)
	 */
	void touch(int x, int y, int time);

	/**
	 * 输入文本内容
	 * 
	 * @param txt
	 */
	void inputTxt(String txt);

	/**
	 * 开启飞行模式
	 */
	void openAirplane();

	/**
	 * 开启飞行模式
	 */
	void closeAirplane();

	/**
	 * 是否亮屏幕
	 */
	boolean isScreenOn();

	/**
	 * 蓝牙是否开启
	 */
	boolean isBluetooh();

	/**
	 * 判断设备是否是虚拟机
	 * 
	 * @return
	 */
	boolean isVm();

	/**
	 * 重启手机
	 */
	void reboot();

	/**
	 * 关机
	 */
	void shutdown();

	/**
	 * 获取安卓系统版本号
	 * 
	 * @return
	 */
	String getAndroidVer();

	/**
	 * 检测WiFi是否开启
	 * 
	 * @return
	 */
	boolean isConnectWifi();

	/**
	 * 关闭/开启数据流量
	 * 
	 * @param flag
	 *            1 开启 0 关闭
	 */
	void controlData(int flag);

	/**
	 * 关闭/开启Wifi
	 * 
	 * @param flag
	 *            1 开启 0 关闭
	 */
	void controlWifi(int flag);

	/**
	 * 查看设备已安装应用的包名
	 * 
	 * @param type
	 *            0 第三方应用的包 1 系统应用的包 3 所有应用的包
	 */
	List<String> getAppList(int type);

	/**
	 * 获取正在运行中应用的包名
	 * 
	 */
	List<String> getRunningAppList();

	/**
	 * 获取外网ip
	 * 
	 * @return
	 */
	String getIp();

	/**
	 * 获取mac
	 * 
	 * @return
	 */
	String getMac();

	/**
	 * 临时文件存放地址
	 * 
	 * @return
	 */
	String tempPath();

	/**
	 * 临时文件路径
	 * 
	 * @param filename
	 *            文件名
	 * @return
	 */
	String tempFile(String filename);

	/**
	 * 删除指定文件
	 * 
	 * @param filename
	 */
	void delFile(String filename);

	/**
	 * 创建文件夹
	 * 
	 * @param folderpath
	 */
	void createFolder(String folderpath);

	/**
	 * 删除指定目录下指定后缀的文件
	 * 
	 * @param filepath
	 * @param filename
	 */
	void findFileDelete(String filepath, String filename);

	/**
	 * 写内容到指定行
	 * 
	 * @param path
	 * @param line
	 * @param str
	 */
	void writeFileLine(String path, int line, String str);

	/**
	 * 读取文件
	 * 
	 * @param filepath
	 *            文件路径
	 * @param isdel
	 *            是否删除
	 * @return
	 */
	String readFile(String filepath, boolean isdel);

	/**
	 * 设置文件权限 r=4,w=2,x=1
	 * 
	 * @param path
	 * @param per
	 *            0 读写 1 只读 2 读写,并且可执行
	 */
	void chomd(String path, int per);

	/**
	 * 设置文件权限[增强]r=4,w=2,x=1
	 * 
	 * @param path
	 * @param per
	 * 
	 */
	void chomdEx(String path, int per);

	/**
	 * 遍历目录
	 * 
	 * @param path
	 * @param filter
	 * @return
	 */
	String scanPath(String path, String filter);

	/**
	 * 生成随机名称文件
	 * 
	 * @param path
	 * @param prefix
	 * @param postfix
	 * @param lenght
	 * @return
	 */
	String getTempFile(String path, String prefix, String postfix, int length);

	/**
	 * 提取路径中包含的文件名
	 * 
	 * @param path
	 * @return
	 */
	String getFileName(String path);

	/**
	 * 提取路径中包含的文件后缀
	 * 
	 * @param path
	 * @return
	 */
	String getFileType(String path);

	/**
	 * 线程休眠
	 * 
	 * @param ms
	 */
	void sleep(int ms);

	/**
	 * 执行并返回excute命令的结果
	 * 
	 * @param cmd
	 * @param filename
	 * @return
	 */
	String execute(String cmd, String filename);
}
